<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>

        // let p = new Promise((res,rej)=>{
        //     res('ok')
        //     // rej('error')
        // })

        // let p2 =  p.then(val=>{
        //         console.log("成功",val);
        //         // return {name:"老王"};
        //         // 非promise对象 就是成功
        //         // throw '错误'
        //         // return new Promise((res,rej)=>{
        //         //     // res('内部ok')
        //         //     rej('失败')
        //         // })
        //     },rea=>{
        //         console.log("失败",rea);
        //         return 123;
        //     });

        // console.log(p2);

        // 链式操作

        // let p = new Promise((res,rej)=>{
        //     res('ok')
        //     // rej('error')
        // })

        // p.then(val=>{
        //     console.log(val);
        //     return val+'k';
        // }).then(val=>{
        //     console.log(val);
        //     return val+'k';
        // }).then(val=>{
        //     console.log(val);
        // })

        // 1. 定义promise实例
            // 1.1 设置单次定时器
                // 1.1.1 调用resolve函数
        // 2. 调用promise实例的then方法
            // 2.1 打印 resolve 参数
            // 2.2 返回新的promise实例
                // 2.2.1 设置单次定时器
                    // 2.2.1.1 调用resolve函数
        // 3. 调用promise实例的then方法
            // 3.1 打印resolve参数
            // 3.2 返回新的promise实例
            // 循环往复...  

        // 4. 调用promise实例的catch方法
            // n.1 定义reject函数
            // n.2 打印reject函数的参数


        // 5. 过程异常处理演示 - 调用reject函数

        let p = new Promise((res,rej)=>{
            setTimeout(() => {
                res('报名成功')
            }, 1000);
        })

        p.then(val=>{
            console.log(val);
            return new Promise((res,rej)=>{
                setTimeout(() => {
                   rej('学习错误')
                }, 1000);
            })
        }).then(val=>{
            console.log(val);
            return new Promise((res,rej)=>{
                setTimeout(() => {
                   rej('简历错误')
                }, 1000);
            })
        }).then(val=>{
            console.log(val);
            return new Promise((res,rej)=>{
                setTimeout(() => {
                   res('面试成功')
                }, 1000);
            })
        }).then(val=>{
            console.log(val);
            return new Promise((res,rej)=>{
                setTimeout(() => {
                   res('入职成功')
                }, 1000);
            })
        }).then(val=>{
            console.log(val);
        },rea=>{
            console.log("then的失败",rea);
            return new Promise((res,rej)=>{
                rej('失败')
            })
        }).catch(rea=>{
            console.log('错误信息',rea);
        })

        // 异常穿透

    </script>
</body>

</html>